package com.weic.easycache.framework.config;

import com.weic.easycache.framework.db.Table;
import com.weic.easycache.framework.web.Api;

/**
 * 网络接口数据缓存和独立数据库访问任务配置。每个配置表示一个独立的数据库访问或者网络接口访问任务。
 * 独立的数据库访问任务不能访问接口专用缓存表，而是自定义实体类映射的表，以防止混乱。
 * 与网络接口有关的任务，缓存全部存入一个接口专用的通用数据库表。详见Api配置说明。
 **/
public class TaskConfig<T, ID, JSON> {
	public static final int TYPE_TABLE	= 0;
	public static final int TYPE_API	= 1;
	public static final int TYPE_IMG	= 2;

	public final int type;
	public final int id;
	/**配置一个独立的数据库访问任务**/
	public final Table<T, ID> table;
	/**是读操作还是写操作**/
	public final boolean writable;
	/**配置一个接口访问任务。包含缓存的操作**/
	public final Api<JSON> api;
	/**表示是否从api缓存读取上次使用的这条记录，若为true，则将不进行网络访问**/
	public final boolean lastUsed;
	/**针对api任务，当参数不完整的时候是否可以跳过当前任务**/
	public final boolean canIrgnore;
	/**是否必须的数据。在一个队列中，needful的数据会占用任务时间进行读取，非必须的数据会
	 * 根据情况（取决于IApiBiz.canBgUpdate()返回值）决定是否在后台读取，减少任务占用时间。**/
	public final boolean needful;
	/**针对image任务，是返回本地文件路径还是Bimap对象**/
	public final boolean toBitmap;
	/**针对image任务，是否忽略本地文件缓存**/
	public final boolean irgnoreCache;

	public TaskConfig(int id, Table<T, ID> table, boolean writable) {
		this.type = TYPE_TABLE;
		this.id = id;
		this.table = table;
		this.writable = writable;
		this.api = null;
		this.lastUsed = false;
		this.needful = true;
		this.canIrgnore = false;
		this.toBitmap = false;
		this.irgnoreCache = false;
	}

	public TaskConfig(int id, Api<JSON> api, boolean lastUsed, boolean needful) {
		this(id, api, lastUsed, needful, false);
	}

	public TaskConfig(int id, Api<JSON> api, boolean lastUsed, boolean needful, boolean canIrgnore) {
		this.type = TYPE_API;
		this.id = id;
		this.table = null;
		this.writable = false;
		this.api = api;
		this.lastUsed = lastUsed;
		this.needful = needful;
		this.canIrgnore = canIrgnore;
		this.toBitmap = false;
		this.irgnoreCache = false;
	}

	public TaskConfig(int id, boolean toBitmap, boolean irgnoreCache, boolean needful) {
		this(id, toBitmap, irgnoreCache, needful, true);
	}
	
	public TaskConfig(int id, boolean toBitmap, boolean irgnoreCache, boolean needful, boolean canIrgnore) {
		this.type = TYPE_IMG;
		this.id = id;
		this.table = null;
		this.writable = false;
		this.api = null;
		this.lastUsed = false;
		this.needful = needful;
		this.canIrgnore = canIrgnore;
		this.toBitmap = toBitmap;
		this.irgnoreCache = irgnoreCache;
	}
}
